「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > TypeScript の「as const」の力を解き放つ: 知っておくべき過小評価されている機能

TypeScript の「as const」の力を解き放つ: 知っておくべき過小評価されている機能

2024 年 11 月 8 日に公開
ブラウズ:680

Unlocking the Power of TypeScript

TypeScript で最も過小評価されている機能について議論するときに、よく目立たない機能の 1 つは as const アサーションです。この機能はさまざまなシナリオで非常に役立ち、開発者に大きなメリットをもたらします。

「as const」を理解する

まず、const が何を行うかを定義しましょう。次のようなオブジェクトがあると想像してください:

const routes = {
  home: "/home",
  profile: "/profile",
  notifications: "/notification",
};

ルートのプロパティにマウスを移動すると、ルートが文字列として入力されていることがわかります。たとえば、routes.home は「/home」ではなく文字列として入力されます。これは、TypeScript がこれらのプロパティが変更される可能性があると想定し、変更可能な文字列として推論するためです。

次に、これらの特定のルートのみを受け入れる関数を考えてみましょう。次のように型を定義できます:

function changeRoute(route: "home" | "profile" | "notifications") {
  // navigate to route
}

このアプローチは機能しますが、反復的でエラーが発生しやすくなります。新しいルートを追加する場合は、関数の型定義を更新する必要がありますが、これは理想的ではありません。

オブジェクトを不変にする

ここで const が登場します。 const として使用すると、オブジェクトを不変にすることができ、TypeScript は単なる文字列ではなくリテラル型を推論します。

const routes = {
  home: "/home",
  profile: "/profile",
  notifications: "/notification",
} as const;

現在、routes.home は「/home」と入力され、routes.notifications は「/notifications」と入力されます。この不変性により、これらのプロパティは変更できないことが保証され、TypeScript はそれらの特定の値を認識します。

実際の使用例

const として関数に統合しましょう:

function changeRoute(route: typeof routes[keyof typeof routes]) {
  // navigate to route
}

ここで、typeof Routes はルート オブジェクトのタイプを取得し、keyof typeof Routes はキーを抽出して、ルート値の正確なタイプを取得します。これにより、関数は繰り返し更新することなく、ルート オブジェクトの変更に適応できるようになります。

型の抽出

as const のもう 1 つの強力な側面は、型抽出を可能にする方法です。例えば:

type Routes = (typeof routes)[keyof typeof routes];

このタイプの定義は、ルート オブジェクトの値を動的に抽出するため、関数の保守性が向上し、冗長性が削減されます。

結論

TypeScript の as const アサーションは、型の安全性を大幅に向上させ、コードの冗長性を削減できる多用途で強力な機能です。オブジェクトを不変にし、正確な型推論を可能にすることで、コードベースの維持と拡張が簡素化されます。試してみれば、TypeScript プロジェクトをどのように強化できるかがわかります!
コーディングを楽しんでください!

[開示: この記事は共同作業であり、私自身のアイデアと ChatGPT の支援を組み合わせて表現力を強化しています。]

リリースステートメント この記事は次の場所に転載されています: https://dev.to/sharoztanveer/unlocking-the-power-of-typescripts-as-const-the-underrated-feature-you-need-to-know-25l7?1侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3